/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.adsi.vista;

import com.adsi.logica.LogicaConsignacionLocal;
import com.adsi.logica.LogicaCuentasLocal;
import com.adsi.logica.LogicaUsuariosLocal;
import com.adsi.modelo.Consignaciones;
import com.adsi.modelo.ConsignacionesPK;
import com.adsi.modelo.Cuentas;
import com.adsi.modelo.Usuarios;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Estudiante
 */
@ManagedBean(name = "consignacionVista")
@RequestScoped
public class ConsignacionVista {

    @EJB
    private LogicaConsignacionLocal logicaConsignacion;

    @EJB
    private LogicaCuentasLocal logicaCuenta;

    @EJB
    private LogicaUsuariosLocal logicaUsuario;

    private SelectOneMenu cbmUsuario;
    private SelectOneMenu cbmCuenta;
    private InputText txtCodigo;
    private InputText txtValor;
    private Calendar txtFecha;
    private Date DateFecha;
    private InputTextarea txtDescripcion;
    private CommandButton btnRegistra;
    private CommandButton btnEliminar;
    private CommandButton btnModificar;
    private CommandButton btnLimpiar;
    private Consignaciones selecConsignacion;
    private List<Consignaciones> listaConsignaciones;
    private ArrayList<SelectItem> ItemsUsuario = null;
    private ArrayList<SelectItem> ItemsCuenta = null;

    public ConsignacionVista() {
    }

    public LogicaConsignacionLocal getLogicaConsignacion() {
        return logicaConsignacion;
    }

    public void setLogicaConsignacion(LogicaConsignacionLocal logicaConsignacion) {
        this.logicaConsignacion = logicaConsignacion;
    }

    public LogicaCuentasLocal getLogicaCuenta() {
        return logicaCuenta;
    }

    public void setLogicaCuenta(LogicaCuentasLocal logicaCuenta) {
        this.logicaCuenta = logicaCuenta;
    }

    public LogicaUsuariosLocal getLogicaUsuario() {
        return logicaUsuario;
    }

    public void setLogicaUsuario(LogicaUsuariosLocal logicaUsuario) {
        this.logicaUsuario = logicaUsuario;
    }

    public SelectOneMenu getCbmUsuario() {
        return cbmUsuario;
    }

    public void setCbmUsuario(SelectOneMenu cbmUsuario) {
        this.cbmUsuario = cbmUsuario;
    }

    public InputText getTxtCodigo() {
        return txtCodigo;
    }

    public void setTxtCodigo(InputText txtCodigo) {
        this.txtCodigo = txtCodigo;
    }

    public SelectOneMenu getCbmCuenta() {
        return cbmCuenta;
    }

    public void setCbmCuenta(SelectOneMenu cbmCuenta) {
        this.cbmCuenta = cbmCuenta;
    }

    public InputText getTxtValor() {
        return txtValor;
    }

    public void setTxtValor(InputText txtValor) {
        this.txtValor = txtValor;
    }

    public Calendar getTxtFecha() {
        return txtFecha;
    }

    public Date getFecha() {
        return DateFecha;
    }

    public void setFecha(Date DateFecha) {
        this.DateFecha = DateFecha;
    }

    public void setTxtFecha(Calendar txtFecha) {
        this.txtFecha = txtFecha;
    }

    public InputTextarea getTxtDescripcion() {
        return txtDescripcion;
    }

    public void setTxtDescripcion(InputTextarea txtDescripcion) {
        this.txtDescripcion = txtDescripcion;
    }

    public CommandButton getBtnRegistra() {
        return btnRegistra;
    }

    public void setBtnRegistra(CommandButton btnRegistra) {
        this.btnRegistra = btnRegistra;
    }

    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }

    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public Consignaciones getSelecConsignacion() {
        return selecConsignacion;
    }

    public void setSelecConsignacion(Consignaciones selecConsignacion) {
        this.selecConsignacion = selecConsignacion;
    }

    public List<Consignaciones> getListaConsignaciones() {
        if (listaConsignaciones == null) {
            try {
                listaConsignaciones = logicaConsignacion.consutar();
            } catch (Exception ex) {
                Logger.getLogger(ConsignacionVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listaConsignaciones;
    }

    public void setListaConsignaciones(List<Consignaciones> listaConsignaciones) {
        this.listaConsignaciones = listaConsignaciones;
    }

    public ArrayList<SelectItem> getItemsUsuario() {
        if (ItemsUsuario == null) {
            try {
                ItemsUsuario = new ArrayList<>();
                List<Usuarios> lista = logicaUsuario.consultarUsuarios();

                for (int i = 0; i < lista.size(); i++) {
                    ItemsUsuario.add(new SelectItem(lista.get(i).getUsuCedula(), lista.get(i).getUsuNombre()));
                }
            } catch (Exception ex) {
                Logger.getLogger(ConsignacionVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return ItemsUsuario;
    }

    public void setItemsUsuario(ArrayList<SelectItem> ItemsUsuario) {
        this.ItemsUsuario = ItemsUsuario;
    }

    public ArrayList<SelectItem> getItemsCuenta() {
        if (ItemsCuenta == null) {
            try {
                ItemsCuenta = new ArrayList<>();
                List<Cuentas> lista = logicaCuenta.consultar();

                for (int i = 0; i < lista.size(); i++) {
                    ItemsCuenta.add(new SelectItem(lista.get(i).getCueNumero(), lista.get(i).getCueNumero()));
                }

            } catch (Exception ex) {
                Logger.getLogger(ConsignacionVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return ItemsCuenta;
    }

    public void setItemsCuenta(ArrayList<SelectItem> ItemsCuenta) {
        this.ItemsCuenta = ItemsCuenta;
    }

    public void funcion_limpiar() {
        cbmCuenta.setValue("");
        cbmUsuario.setValue("");
        txtCodigo.setValue("");
        txtDescripcion.setValue("");
        //txtFecha.setValue("");
        txtValor.setValue("");
        txtCodigo.setDisabled(false);
        cbmCuenta.setDisabled(false);
        cbmUsuario.setDisabled(false);
        btnRegistra.setDisabled(false);
        btnModificar.setDisabled(true);
        btnEliminar.setDisabled(true);
    }

    public void funcion_registrar() {
        try {
            Consignaciones c = new Consignaciones();
            ConsignacionesPK cPK = new ConsignacionesPK();
            cPK.setConCodigo(Long.parseLong(txtCodigo.getValue().toString()));
            cPK.setCueNumero(cbmCuenta.getValue().toString());
            c.setConsignacionesPK(cPK);
            c.setCuentas(logicaCuenta.ConsultarPorNumeros(cbmCuenta.getValue().toString()));
            c.setUsuCedula(logicaUsuario.consultarPorCedula(Long.parseLong(cbmUsuario.getValue().toString())));
            c.setConValor(BigDecimal.valueOf(Long.parseLong(txtValor.getValue().toString())));
            c.setConDescripcion(txtDescripcion.getValue().toString());
            //c.setConFecha(txtFecha.getValue().toString());
            /*
             String fecha = txtFecha.getValue().toString();
             Date ConverFecha = new SimpleDateFormat("yyyy-dd-MM").parse(fecha);
             c.setConFecha(ConverFecha);
             */
            //Date date = new Date();
            //Date formatteddate = null;
            //DateFormat df = new SimpleDateFormat("dd-MMM-yyyy");

            //date = df.parse(txtFecha.getValue().toString());
            //c.setConFecha(date);
            
            //formatteddate = df.format(date);

            logicaConsignacion.registrar(c);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "INFO", "La consignacion se registro con exito"));
        } catch (Exception ex) {
            Logger.getLogger(ConsignacionVista.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", ex.getMessage()));
        }
    }

    public void funcion_modificar() {
        try {
            Consignaciones c = new Consignaciones();
            ConsignacionesPK cPK = new ConsignacionesPK();
            cPK.setConCodigo(Long.parseLong(txtCodigo.getValue().toString()));
            cPK.setCueNumero(cbmCuenta.getValue().toString());
            c.setConsignacionesPK(cPK);
            c.setCuentas(logicaCuenta.ConsultarPorNumeros(cbmCuenta.getValue().toString()));
            c.setUsuCedula(logicaUsuario.consultarPorCedula(Long.parseLong(cbmUsuario.getValue().toString())));
            c.setConValor(BigDecimal.valueOf(Long.parseLong(txtValor.getValue().toString())));
            c.setConDescripcion(txtDescripcion.getValue().toString());

            String fecha = txtFecha.getValue().toString();
            Date ConverFecha = new SimpleDateFormat("yyyy-dd-MM", Locale.ENGLISH).parse(fecha);
            c.setConFecha(ConverFecha);
            logicaConsignacion.modificar(c);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "INFO", "La consignacion se registro con exito"));
        } catch (Exception ex) {
            Logger.getLogger(ConsignacionVista.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", ex.getMessage()));
        }
    }

    public void funcion_eliminar() {
        try {
            Consignaciones c = new Consignaciones();
            ConsignacionesPK cPK = new ConsignacionesPK();
            c.setCuentas(logicaCuenta.ConsultarPorNumeros(cbmCuenta.getValue().toString()));
            cPK.setConCodigo(Long.parseLong(txtCodigo.getValue().toString()));
            cPK.setCueNumero(cbmCuenta.getValue().toString());
            c.setConsignacionesPK(cPK);
            logicaConsignacion.eliminar(c);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "INFO", "La consignacion se elimino con exito"));
        } catch (Exception ex) {
            Logger.getLogger(ConsignacionVista.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", ex.getMessage()));
        }
    }

    public void funcion_seleccionar(SelectEvent event) {
        Consignaciones consignacionSelecionada = (Consignaciones) event.getObject();
        txtCodigo.setValue(consignacionSelecionada.getConsignacionesPK().getConCodigo());
        txtDescripcion.setValue(consignacionSelecionada.getConDescripcion());
        txtFecha.setValue(consignacionSelecionada.getConFecha());
        txtValor.setValue(consignacionSelecionada.getConValor());
        cbmCuenta.setValue(consignacionSelecionada.getCuentas().getCueNumero());
        cbmUsuario.setValue(consignacionSelecionada.getUsuCedula().getUsuCedula());
        btnRegistra.setDisabled(true);
        btnModificar.setDisabled(false);
        btnEliminar.setDisabled(false);
        txtCodigo.setDisabled(true);
        cbmCuenta.setDisabled(true);
        cbmUsuario.setDisabled(true);
    }
}
